jQuery Mobileでフォームを作る
はじめに
今回はフォームについてです。 jQuery Mobileでは通常のコントロールの見た目ではなくて、モバイル端末に適した見た目がいくつか用意されています。そのうちのいくつかを使って簡単なフォームを作成してみたいと思います。
基本
フォーム作成は通常のhtmlと同様にformタグで括り、その中にフォームの要素を配置していきます。 通常ラベルとフォーム要素をセットで配置すると思いますが、それらのセットをdivまたはfieldsetなどで括り、data-role=“fieldcontain”を指定します。例えば、名前をテキストインプットで配置するなら次の様になります。
<form action="" method="post"> <div data-role="fieldcontain"> <label for="name">名前</label> <input type="text" id="name" /> </div> </form>
選択要素
単数選択、複数選択の選択形の要素はいくつかの表現が用意されています。男性女性などの2択ならフリップスイッチが使えます。selectタグにdata-role="slider"を指定します。
<div data-role="fieldcontain"> <label for="gender">性別</label> <select name="gender" id="gender" data-role="slider"> <option value="man">男性</option> <option value="woman">女性</option> </select> </div>
複数選択のチェックボックスをリスト風に表示する事が出来ます。
<div data-role="fieldcontain"> <fieldset data-role="controlgroup"> <legend>お問い合わせ種別</legend> <input type="checkbox" name="type1" id="type1" value="html" /> <label for="type1">html</label> <input type="checkbox" name="type2" id="type2" value="JavaScript" /> <label for="type2">JavaScript</label> <input type="checkbox" name="type3" id="type3" value="css" /> <label for="type3">css</label> </fieldset> </div>
ボタン
ボタンはtype="button"を指定すれば良いのですが、data-inline="true"で横並びにする事が出来ます。
<input type="button" value="クリア" data-inline="true" id="clearBtn" /> <input type="button" value="送信" data-inline="true" />
フォームのクリア
キャンセルボタンにフォームのクリア機能を付けてみます。 テキスト入力はvalueを""で初期化をすれば良いですが、独自の見た目になっている入力要素については、値の初期化を行った後にリフレッシュさせる必要があります。
/* テキスト入力形はvalueに""を設定する */ $("input[type='text']").attr("value", ""); $("textarea").attr("value", ""); /* check boxの場合は、チェックされているものを外して、リフレッシュする */ $("input[type='checkbox']").attr("checked", false).checkboxradio("refresh"); /* フリップスイッチの場合も初期値に戻して、リフレッシュさせる */ var mySlider = $("select#gender"); mySlider[0].selectedIndex = 0; mySlider.slider("refresh");
まとめ
動作は次の様になります。
フォームを開く(このサンプルはChromeブラウザでの閲覧をおすすめします。)
今回作ったソースは以下の通りです。(JavaScriptとページ部分のみ)
フォームについては他にもカスタマイズされた見た目があるのでフォームギャラリー - jQuery Mobile 日本語リファレンスのページを参照してみてください。
<script type="text/javascript"> $(function(){ $("#cancelBtn").click(function(){ /* check box */ $("input[type='checkbox']").attr("checked", false).checkboxradio("refresh"); $("input[type='radio']").attr("checked", false).checkboxradio("refresh"); /* slider */ var mySlider = $("select#gender"); mySlider[0].selectedIndex = 0; mySlider.slider("refresh"); /* text */ $("input[type='text']").attr("value", ""); $("textarea").attr("value", ""); }); }); </script> <div data-role="page" id="form"> <div data-role="header" data-position="fixed"> <h1>form</h1> </div> <div data-role="content"> <h2 id="toc-6">お問い合わせ</h2> <form action="" method="post"> <div data-role="fieldcontain"> <label for="name">名前</label> <input type="text" id="name" /> </div> <div data-role="fieldcontain"> <label for="gender">性別</label> <select name="gender" id="gender" data-role="slider"> <option value="man">男性</option> <option value="woman">女性</option> </select> </div> <div data-role="fieldcontain"> <fieldset data-role="controlgroup"> <legend>お問い合わせ種別</legend> <input type="checkbox" name="type1" id="type1" value="html" /> <label for="type1">html</label> <input type="checkbox" name="type2" id="type2" value="JavaScript" /> <label for="type2">JavaScript</label> <input type="checkbox" name="type3" id="type3" value="css" /> <label for="type3">css</label> </fieldset> </div> <div data-role="fieldcontain"> <label for="comment">ご自由にどうぞ!!</label> <textarea id="comment"></textarea> </div> <input type="button" value="クリア" data-inline="true" id="clearBtn" /> <input type="button" value="送信" data-inline="true" /> </form> </div> <div data-role="footer" data-position="fixed"> <h4>form</h4> </div> </div>